package com.dyz.leetcode._20_dynamicProgramming._44;

public class _44_isMatch01 {
    public boolean isMatch(String s, String p) {
        int m = s.length();
        int n = p.length();
        //
        boolean[][] dp = new boolean[m+1][n+1];

        //初始化
        dp[0][0] = true;
        for (int i = 1; i <= n; i++) {
            // 3. 空字符串和 * 是匹配的
            if (dp[0][i - 1] && p.charAt(i - 1) == '*') {
                dp[0][i] = true;
            }
        }
        // 状态转移
        // s.charAt(i-1)==p.char(j-1) || p.charAt(j-1)==?    dp[i][j] = dp[i-1][j-1]
        // p.charAt(j-1)=="*"   dp[i][j] = dp[i][j-1]||dp[i-1][j]
        for (int i = 1; i <= m; i++) {
            for (int j = 1; j <= n; j++) {
                if (s.charAt(i - 1) == p.charAt(j - 1)
                        || p.charAt(j - 1) == '?') {
                    dp[i][j] = dp[i - 1][j - 1];
                } else if (p.charAt(j - 1) == '*') {
                    dp[i][j] = dp[i][j - 1] || dp[i - 1][j];
                }
            }
        }

        return dp[m][n];
    }
}
